# 模块概览
在node中,child_process这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大门。
举个简单的例子:
const spawn = require('child_process').spawn;
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
@前端进阶之旅: 代码已经复制到剪贴板
# 几种创建子进程的方式
注意事项:
- 下面列出来的都是异步创建子进程的方式,每一种方式都有对应的同步版本。
.exec()、.execFile()、.fork()底层都是通过.spawn()实现的。.exec()、execFile()额外提供了回调,当子进程停止的时候执行。
child_process.spawn(command[, args][, options]) child_process.exec(command[, options][, callback]) child_process.execFile(file[, args][, options][, callback]) child_process.fork(modulePath[, args][, options])
# child_process.exec(command[, options][, callback])
创建一个shell,然后在shell里执行命令。执行完成后,将stdout、stderr作为参数传入回调方法。
spawns a shell and runs a command within that shell, passing the stdout and stderr to a callback function when complete.
例子如下:
- 执行成功,
error为null;执行失败,error为Error实例。error.code为错误码, stdout、stderr为标准输出、标准错误。默认是字符串,除非options.encoding为buffer
var exec = require('child_process').exec;
// 成功的例子
exec('ls -al', function(error, stdout, stderr){
if(error) {
console.error('error: ' + error);
return;
}
console.log('stdout: ' + stdout);
console.log('stderr: ' + typeof stderr);
});
// 失败的例子
exec(